package com.link2room.rodimus.facade;

import com.link2room.common.dto.param.base.BaseL2rParamDto;
import com.link2room.common.jpa.result.QueryResult;
import com.link2room.rodimus.dto.param.api.*;
import com.link2room.rodimus.dto.param.inside.CouponGiveOutInsideParamDto;
import com.link2room.rodimus.dto.result.base.*;

import java.util.List;

/**
 * Created by LN on 2017/7/24.11:30
 */
public interface ICouponFacadeService {
    /**
     * 当前用户电子券列表
     * @param paramDto
     * @return
     * @throws Exception
     */
    List<CouponConvergeDto> getCurrentCouponList(CouponParamDto paramDto) throws Exception;

    /**
     * 电子券详情
     * @param paramDto
     * @return
     * @throws Exception
     */
    CouponDetailDto getCouponDetail(CouponParamDto paramDto) throws Exception;

    /**
     * 电子券赠送
     * @param paramDto
     * @return
     * @throws Exception
     */
    CouponPresentationDto presentCoupon(CouponPresentParamDto paramDto) throws Exception;

    /**
     * 领取电子券
     * @param paramDto
     */
    void drawCoupon(CouponDrawParamDto paramDto) throws Exception;

    /**
     * 当前用户分享list
     */
    List<CouponPresentDto> currentUserPresentList(BaseL2rParamDto baseL2rParamDto) throws Exception;

    /**
     * 重新发起赠送
     * @param paramDto
     * @return
     */
    CouponPresentationDto rePresentCoupon(CouponRePresentParamDto paramDto) throws Exception;

    /**
     * 券领取详情
     * @return
     */
    CouponPresentDto listCouponReceived(CouponReceiveParamDto paramDto) throws Exception;

    /**
     * 电子券兑换
     * @param paramDto
     */
    CouponConsumeDto couponConsumWithExpress(CouponConsumeParamDto paramDto) throws Exception;

    /**
     * 电子券消费
     * @param paramDto
     * @return
     * @throws Exception
     */
    CouponConsumeDto couponConsum(CouponConsumeParamDto paramDto) throws Exception;

    /**
     * 电子券兑换列表
     * @return
     */
    QueryResult currentUserCouponConsumList(CouponConsumeParamDto paramDto) throws Exception;

    /**
     * 赠送券重置
     * @param paramDto
     */
    void presentCouponReset(CouponPresentResetParamDto paramDto) throws Exception;

    /**
     * 发放电子券
     * @return
     */
    void putOutCoupon(CouponGiveOutInsideParamDto paramDto) throws Exception;

    void coupenCodeCollarCoupen(CoupenCodeCollarCoupenParamDto paramDto) throws Exception;

}
